
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;



/**
 * @author User
 * @version 1.0
 * @created 10-sep-2012 11:23:27 a.m.
 */
public class SensorH2O extends Thread {

	private Mina mina;
	private JavaCPN Server;
        private boolean finalizar=false;
        private Bomba bomba;
        private double nivel_min;
        private double nivel_max;
        //------Parte Implementada por el negro
        public static boolean stop;
        private int port;
	private String host;
        ByteArrayInputStream fromCPN;
        String recibirDeCPN;
        //se implementaron los metodos conectarse, recibir, y enviar.
        //------2 variabales agregadas-------------------------------

	public SensorH2O(){
        this.Server = new JavaCPN();
	}

	public void finalize() throws Throwable {
		super.finalize();
	}
	/**
	 * 
	 * @param Mina
	 */

	public void SensorH2O(Mina mina, int puerto, String host, Bomba bomba){
            this.mina= mina;
            this.Server = new JavaCPN();
            this.bomba = bomba;
            
            

	}

	private boolean Conectar(){
        try {
            Server.connect("Localhost",9000);
            //Server.connect(host, port);
            System.out.println("Server Conectado");
            stop=true;
        } catch (IOException ex) {
            System.err.println("no se encontro el host " + host);
            stop=false;
                                   }

		return stop;//stop puede ser true or false si se conecto o no
	}

	private void Enviar(String queHacer){
            fromCPN=EncodeDecode.encode(queHacer);
        try {
            Server.send(fromCPN);
            // TODO Auto-generated catch block}
        } catch (SocketException ex) {
            Logger.getLogger(SensorH2O.class.getName()).log(Level.SEVERE, null, ex);
        }
	}

	private String Medir(){
        String queHacer;
        
        if (bomba.get_encendido())//si la bomba está prendida...
                {
                    if (mina.getH2O()<nivel_min){// si el tanque esta vacio
                    queHacer = "apagar";    
                    }
                    else{ queHacer= "encender";}// si el tanque no esta vacio
                }
        else{//si la bomba esta apagada
                {
                    if (mina.getH2O()>nivel_max){// si el tanque esta lleno
                    queHacer = "encender";    
                    }
                    else{ queHacer= "apagar";}// si el tanque no esta lleno
                }
            
        }        
         
        return queHacer;

	}

	private void RecibirSenal(){


            try {
                 recibirDeCPN = EncodeDecode.decodeString(Server.receive());
                 System.out.println(recibirDeCPN);
                } catch (SocketException ex)
                {
                Logger.getLogger(SensorH2O.class.getName()).log(Level.SEVERE, null, ex);
                }

	}
       

	public void run(){
            while (this.Conectar()==false){
            this.Conectar();}

            
            while (finalizar==false){
            RecibirSenal();
            Enviar("bajo");
            }

	}
}//end SensorH2O